package com.jf.cloud.service.sysmanager.common.db;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;

import com.jf.cloud.service.sysmanager.common.taglib.Paging;
import com.jf.cloud.service.sysmanager.common.util.NumberUtil;

/**
 * 公共帮助类――封装基础操作 该类已废弃，请使用<code>com.jf.app.support.base.BaseDataHandler</code>替代
 * 
 * @author 程伟平 修改时间：2012-04-28 15:56:55
 */
@Service("baseHandler")
@Deprecated
public class BaseHandler {

	/**
	 * 日志
	 */
	private static Log log = LogFactory.getLog(BaseHandler.class);

	/**
	 * 基础DAO类
	 */
	@Autowired
	private BaseDao baseDao;

//	/**
//	 * 获取基础DAO 已废弃，请使用BaseDao替代。
//	 * 
//	 * @return 基础DAO
//	 */
//	@Deprecated
//	public BaseDao getBaseDao() {
//		return baseDao;
//	}
//
//	/**
//	 * 判断是否存在 已废弃，请使用<code>com.jf.app.support.base.BaseDataHandler</code>类<code>isExist</code>方法。
//	 */
//	@Deprecated
//	public boolean isExist(String tableName, Query query) {
//		try {
//			if (query != null && query.getWhereSQL() != null && query.getWhereSQL().length() > 1) {
//				String sql = query.getSQL("SELECT COUNT(0) FROM " + tableName);
//				return baseDao.findCount(sql, query.getWhereParam().toArray()) > 0;
//			}
//		} catch (Exception e) {
//			log.error("查询重复数据出错，或没有发现重复数据", e);
//			return false;
//		}
//		return false;
//	}
//
//	/**
//	 * 根据条件查询数量 已废弃，请使用BaseDao替代。
//	 */
//	@Deprecated
//	public int findCount(String tableName, Query query) {
//		int count = 0;
//		if (query != null && query.getWhereSQL() != null && query.getWhereSQL().length() > 1) {
//			String sql = query.getSQL("SELECT COUNT(0) FROM " + tableName);
//			count = baseDao.findCount(sql, query.getWhereParam().toArray());
//		}
//		return count;
//	}
//
//	/**
//	 * 根据条件查询表数据――支持多字段查询，同时支持自定义字段别名。 已废弃，请使用BaseDao替代。
//	 */
//	@Deprecated
//	public Map<String, Object> findMap(String tableName, Map<String, String> columns, Query query) {
//		List<Map<String, Object>> ls = findMapList(tableName, columns, query);
//		return ls == null || ls.size() == 0 ? null : ls.get(0);
//	}
//
//	/**
//	 * 根据条件查询表数据――支持多字段查询，同时支持自定义字段别名。 已废弃，请使用BaseDao替代。
//	 */
//	@Deprecated
//	public List<Map<String, Object>> findMapList(String tableName, Map<String, String> columns, Query query) {
//		if (!(tableName != null && tableName.length() > 0) || !(columns != null && columns.size() > 0)) {
//			throw new IllegalArgumentException("表名与查询字段不能为空");
//		}
//		StringBuffer sb = new StringBuffer(120);
//		sb.append(" SELECT ");
//		for (Map.Entry<String, String> column : columns.entrySet()) {
//			if (sb.length() > 8) {
//				sb.append(", ");
//			}
//			if (column.getKey() != null && column.getValue() != null && column.getValue().length() > 0) {
//				sb.append(column.getKey());
//				sb.append(" AS ");
//				sb.append(column.getValue());
//			} else {
//				sb.append(column.getKey());
//			}
//		}
//		sb.append(" FROM ").append(tableName);
//		return baseDao.findMapList(query.getSQL(sb.toString()), query.getWhereParam().toArray());
//	}
//
//	/**
//	 * 根据条件查询表数据――支持多字段查询，同时支持自定义字段别名。已废弃，请使用BaseDao替代。
//	 */
//	@Deprecated
//	public List<Map<String, Object>> getMapList(String sql, Query query) {
//		if (query != null) {
//			return baseDao.findMapList(query.getSQL(sql), query.getWhereParam().toArray());
//		} else {
//			return baseDao.findMapList(sql);
//		}
//	}
//
//	/**
//	 * 根据条件查询表数据――支持多字段查询，同时支持自定义字段别名。已废弃，请使用BaseDao替代。
//	 */
//	@Deprecated
//	public List<Map<String, Object>> getMapListByParam(String sql, Object... args) {
//		return baseDao.findMapList(sql, args);
//	}
//
//	/**
//	 * 根据主键更新给定字段（注意：不能更新主键【ROW_ID】）。已废弃，请使用BaseDao替代。
//	 */
//	@Deprecated
//	public boolean updateColumns(String tableName, Map<String, String> columns, long rowId) {
//		if (!(tableName != null && tableName.length() > 0) || !(columns != null && columns.size() > 0)) {
//			throw new IllegalArgumentException("表名与更新字段不能为空");
//		}
//		StringBuffer sb = new StringBuffer(120);
//		sb.append(" UPDATE ");
//		sb.append(tableName);
//		sb.append(" SET ");
//		StringBuffer set = new StringBuffer();
//		for (Map.Entry<String, String> column : columns.entrySet()) {
//			if (set.length() > 0) {
//				set.append(", ");
//			}
//			if ("ROW_ID".equals(column.getKey())) {
//				throw new IllegalArgumentException("更新字段不能为主键【ROW_ID】！");
//			}
//			String columnName = column.getKey();
//			if (columnName.endsWith("@DT")) {
//				set.append(columnName.replaceAll("@DT", ""));
//				set.append(" = STR_TO_DATE(?, '%Y-%m-%d %H:%i:%s')");
//			} else {
//				set.append(columnName);
//				set.append(" = ?");
//			}
//		}
//		sb.append(set);
//		sb.append(" WHERE ROW_ID = ? ");
//
//		List<String> params = new ArrayList<String>();
//		params.addAll(columns.values());
//		params.add(String.valueOf(rowId));
//
//		return baseDao.safeUpdate(sb.toString(), 1, params.toArray());
//	}
//
//	/**
//	 * 根据主键更新给定字段（注意：不能更新主键【ROW_ID】）。已废弃，请使用BaseDao替代。
//	 */
//	@Deprecated
//	public int updateColumns(String tableName, Map<String, String> columns, Query query) {
//		if (!(tableName != null && tableName.length() > 0) || !(columns != null && columns.size() > 0)) {
//			throw new IllegalArgumentException("表名与更新字段不能为空");
//		}
//		StringBuffer sb = new StringBuffer(120);
//		sb.append(" UPDATE ");
//		sb.append(tableName);
//		sb.append(" SET ");
//		StringBuffer set = new StringBuffer();
//		for (Map.Entry<String, String> column : columns.entrySet()) {
//			if (set.length() > 0) {
//				set.append(", ");
//			}
//			if ("ROW_ID".equals(column.getKey())) {
//				throw new IllegalArgumentException("更新字段不能为主键【ROW_ID】");
//			}
//			String columnName = column.getKey();
//			if (columnName.endsWith("@DT")) {
//				set.append(columnName.replaceAll("@DT", ""));
//				set.append(" = STR_TO_DATE(?, '%Y-%m-%d %H:%i:%s')");
//			} else {
//				set.append(columnName);
//				set.append(" = ?");
//			}
//		}
//		sb.append(set);
//
//		List<String> params = new ArrayList<String>();
//		params.addAll(columns.values());
//		params.addAll(query.getWhereParam());
//		// 安全检查
//		if (query == null || query.getWhereParam().size() == 0) {
//			throw new RuntimeException(" 【危险语句】 没有条件的 修改语句 不允许执行  ");
//		}
//		return baseDao.update(query.getSQL(sb.toString()), params.toArray());
//	}
//
//	/**
//	 * 按照 key-value 形式 保存数据 tableName : 表名 data： 字段名-值 建议仅在前台 service 内使用。已废弃，请使用BaseDao替代。
//	 */
//	@Deprecated
//	public boolean save(String tableName, Map<String, String> data) {
//		StringBuffer saveSQL = new StringBuffer(100);
//		StringBuffer subSQL = new StringBuffer(100);
//		List<String> paramList = new ArrayList<String>();
//		Assert.hasText(tableName);
//		saveSQL.append(" INSERT INTO ").append(tableName + " (");
//		int count = 0;
//		subSQL.append(" VALUES ( ");
//		for (Map.Entry<String, String> e : data.entrySet()) {
//			if (count > 0) {
//				saveSQL.append(",");
//				subSQL.append(",");
//			}
//			count++;
//			saveSQL.append(e.getKey());
//			subSQL.append("?");
//			paramList.add(e.getValue() == null ? "" : e.getValue());
//		}
//		saveSQL.append(" )");
//		subSQL.append(" )");
//		return baseDao.update(saveSQL.toString() + subSQL.toString(), paramList.toArray()) == 1;
//	}
//
//	/**
//	 * 计算当前页的 合计。已废弃，请使用BaseDao替代。
//	 */
//	@Deprecated
//	public void findCurrentTotal(String sql, Paging<?> paging, String columnName, String resultName) {
//		resultName = resultName == null ? "_" + columnName : resultName;
//		Assert.hasText(resultName);
//		if (sql != null && sql.length() > 0 && paging != null && paging.isPaging()) {
//			sql += paging.getLimitStr();
//		}
//		String currentSql = "select ifnull(SUM(_a." + columnName + "),0) from ( " + sql + " ) as _a";
//		List<String> param = paging.getWhereParam();
//		double curr = baseDao.findSingleColumnObject(currentSql, Double.class, param.toArray());
//		String rs = NumberUtil.getTotalPrice(curr) + "";
//		paging.wm.put(resultName, rs);
//	}
//
//	/**
//	 * 计算 总 合计。已废弃，请使用BaseDao替代。
//	 */
//	@Deprecated
//	public void findAllTotal(String sql, Paging<?> paging, String columnName, String resultName) {
//		resultName = resultName == null ? "_" + columnName : resultName;
//		Assert.hasText(resultName);
//		String currentSql = "select ifnull(SUM(_a." + columnName + "),0) from ( " + sql + " ) as _a";
//		List<String> param = paging.getWhereParam();
//		double curr = baseDao.findSingleColumnObject(currentSql, Double.class, param.toArray());
//		String rs = NumberUtil.getTotalPrice(curr) + "";
//		paging.wm.put(resultName, rs);
//	}

}
